package com.lxit.cms.action.admin.assist.cn.util;

/**
 * 
 * @desc: 工具类方法提提供
 * @project:蓝杰中国移动Cmpp短信网关项目开发 Jun 17, 2009
 * @author: 蓝杰www.netjava.cn
 */
public class Utils {

	/**
	 * 解析连结上来的IP地址
	 * @param sa
	 * @return
	 */
	public static String parseIP(String sa){
		int start=sa.indexOf("/")+1;
		int end=sa.indexOf(":");
		String ip=sa.substring(start,end);
		return ip;
	}
	
	/**
	 * 调试消息原始数据
	 * @param dir:消息发送方向说明
	 * @param data:消息数据
	 */
	public static void debugData(String desc,byte[] data){
		System.out.println("消息总长:"+data.length +" "+desc);		
		int count=0;
	      for(int i=0;i<data.length;i++){
	    	 int b=data[i];
	    	  if(b<0){b+=256;}
	    	 String hexString= Integer.toHexString(b);
	hexString = (hexString.length() == 1) ? "0" + hexString : hexString;
	    	 System.out.print(hexString+"  ");
	    	 count++;
	    	 if(count%4==0){
	    		 System.out.print( "  ");
	    	 }
	    	 if(count%16==0){
	    		 System.out.println();
	    	 }
	      }
	      System.out.println();
    }

	
	
	
	//得到一个唯一的序列号
	//生成方式有问题!
	private static int seq=0;
	public static int getSeq(){
		return ++seq;
	}
	
	/**
	 * 得到格式化时间 MMDDHHMMSS格式
	 * @return: MMDDHHMMSS格式的系统时间
	 */
	public static String getMMDDHHMMSS(){
		java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("MMddhhmmss");
		java.util.Date da=new java.util.Date();
		String timeStr=sdf.format(da);
		return timeStr;
	}
	/**
	 * 根据配置中的spid和密码，生成md5串
	 * @param spid:SP企业ID
	 * @param pwd:SP密码
	 */
	public static byte[] getLoginMd5(String spid,String pwd){
		try{
		java.security.MessageDigest md5=  java.security.MessageDigest.getInstance("MD5");
		//MD5（Source_Addr+9 字节的0 +shared secret+timestamp）
		//timestamp格式为：MMDDHHMMSS，即月日时分秒
		String timeStr=getMMDDHHMMSS();
		String s=spid+"\0\0\0\0\0\0\0\0\0"+pwd+timeStr;
		byte[] data=s.getBytes();
		byte[] result=md5.digest(data);
		return result;
		}catch(Exception ef){
			ef.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 向流中写入指定字节长度的字符串，不足时补0
	 * @param dous:要写入的流对象
	 * @param s:要写入的字符串
	 * @param len:写入长度,不足补0
	 */
	public static void writeString(java.io.DataOutputStream dous,String s,int len)throws Exception{
		byte[] data=s.getBytes();
		if(data.length>len){
			throw new Exception("向流中写入的字符串超长！要写"+len+" 字符串是:"+s);
		}
		int srcLen=data.length;
		dous.write(data);
		while(srcLen<len){
			dous.write('\0');
			srcLen++;
		}
	}
	/**
	 * 从流中读取指定长度的字节，转成字符串返回
	 * @param ins:要读取的流对象
	 * @param len:要读取的字符串长度
	 * @return:读取到的字符串
	 */
	public static String readString(java.io.DataInputStream ins,int len)
	 throws Exception{
		//1.考虑，异常怎么处理？
		byte[] b=new byte[len];
		//2.ins.read(b);
		ins.readFully(b);
		//3.编码方式是什么？？？
		String s=new String(b);
		s=s.trim();
		return s;
	}
	

}
